"reason":"compiler-message",
"package_id":"bar 0.5.0 ([..])",
"target":{"kind":["lib"],"name":"bar","src_path":"[..]lib.rs"},
- "message":{
- "children":[],"code":null,"level":"warning","rendered":null,
- "message":"function is never used: `dead`, #[warn(dead_code)] on by default",
- "spans":[{
- "byte_end":12,"byte_start":0,"column_end":13,"column_start":1,"expansion":null,
- "file_name":"[..]","is_primary":true,"label":null,"line_end":1,"line_start":1,
- "suggested_replacement":null,
- "text":[{"highlight_end":13,"highlight_start":1,"text":"fn dead() {}"}]
- }]
- }
+ "message":"{...}"
}
{
"reason":"compiler-message",
"package_id":"foo 0.5.0 ([..])",
"target":{"kind":["bin"],"name":"foo","src_path":"[..]main.rs"},
- "message":{
- "children":[],"code":null,"level":"warning","rendered":null,
- "message":"unused variable: `unused`, #[warn(unused_variables)] on by default",
- "spans":[{
- "byte_end":22,"byte_start":16,"column_end":23,"column_start":17,"expansion":null,
- "file_name":"[..]","is_primary":true,"label":null,"line_end":1,"line_start":1,
- "suggested_replacement":null,
- "text":[{"highlight_end":23,"highlight_start":17,"text":"[..]"}]
- }]
- }
+ "message":"{...}"
}
{
"reason":"compiler-message",
"package_id":"foo 0.5.0 ([..])",
"target":{"kind":["bin"],"name":"foo","src_path":"[..]"},
- "message":{
- "children":[],"code":null,"level":"warning","rendered":null,
- "message":"unused variable: `unused`, #[warn(unused_variables)] on by default",
- "spans":[{
- "byte_end":22,"byte_start":16,"column_end":23,"column_start":17,"expansion":null,
- "file_name":"[..]","is_primary":true,"label":null,"line_end":1,"line_start":1,
- "suggested_replacement":null,
- "text":[{
- "highlight_end":23,
- "highlight_start":17,
- "text":"fn main() { let unused = 0; }"
- }]
- }]
- }
+ "message":"{...}"
}
{
// Compares JSON object for approximate equality.
// You can use `[..]` wildcard in strings (useful for OS dependent things such as paths).
+// You can use a `"{...}"` string literal as a wildcard for arbitrary nested JSON (useful
+// for parts of object emitted by other programs (e.g. rustc) rather than Cargo itself).
// Arrays are sorted before comparison.
fn find_mismatch<'a>(expected: &'a Json, actual: &'a Json) -> Option<(&'a Json, &'a Json)> {
use rustc_serialize::json::Json::*;
fn sorted(xs: &Vec<Json>) -> Vec<&Json> {
let mut result = xs.iter().collect::<Vec<_>>();
- // `unwrap` should be safe because JSON spec does not allow NaNs
- result.sort_by(|x, y| x.partial_cmp(y).unwrap());
+ result.sort_by(|x, y| x.partial_cmp(y).expect("JSON spec does not allow NaNs"));
result
}
.nth(0)
}
(&Null, &Null) => None,
+ // magic string literal "{...}" acts as wildcard for any sub-JSON
+ (&String(ref l), _) if l == "{...}" => None,
_ => Some((expected, actual)),
}